import com.beans.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-10-09
 * Time: 10:28
 */

public class App {
    public static void main(String[] args) {
        //1.获取spring上下文
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
        //2.获取bean
        UserController usercontroller = context.getBean("userController",UserController.class);
        //3.调用
        usercontroller.say();

        //Service
        UserService userService = (UserService) context.getBean("userService");
        userService.say();

        //Repository
        UserRepository userRepository = context.getBean(UserRepository.class);
        usercontroller.say();

        //Bean 方法注解  此写法 并没有通过bean注解获取bean的  而是通过类注解获取的 因为Bean注解 要和 五大类注解一起使用
        UserComponent userComponent = (UserComponent) context.getBean("userComponent");
        userComponent.sayHi();

        //Bean方法注解的使用
        //1.创建一个实体类 在另一个类当中 实例化此实体类 实例化的这个方法 加上Bean注解
        //获取Bean的时候  需要的是实体类来接受

        //2.当Bean注解 使用了name属性 重命名之后 原来的类名就 不起作用了 且一个Bean可以有多个名字

        //3.当一个类中 有多个Bean注解存入了多个方法时  单纯的getBean获取 并不会报错 指定了对的方法名即可
        //  问题是出在 一个类中多个Bean注解  在其他类中要注入这个方法时会出问题
        User user = (User) context.getBean("user");
        System.out.println(user.toString());

        User user1 = (User) context.getBean("user1");
        System.out.println(user1.toString());
    }
}
